package mybs;

import java.util.Arrays;

/**
 * 来源： http://blog.zhaojie.me/2009/05/1491052.html
 * 
 * 请将方法补充完整：
 *
 *	public static void Reverse(int[] array, int begin, int end) {
 *   		...
 *	} 
 *
 *	Reverse方法的作用是将array数组中，从begin下标到end下标之间的元素反序一下，
 *	如一个数组初始值是[1, 2, 3, 4, 5, 6]，begin为1，end为4，那么当调用了Reverse之后，
 *  array数组中的元素[1, 5, 4, 3, 2, 6]，
 *	其中从array[1]到array[4]之前的元素被反序了。
 *	
 *	此外补充一点……其实本不用补充：这个方法需要对传入参数的正确性进行校验，
 *	如果用户调用该方法时传入了非法的参数，那么则需要抛出异常，并写清原因。
 *	
 *	您可以使用您喜欢的语言来实现：C#，VB，Java，Ruby，Python……但是请不要使用内置库中已经有的功能。:) 
 *
 */
public class Reverse {
	
	public static void reverse(int[] array, int begin, int end) {
		boolean isOK = (begin >= 0) && (end >= 0) && ((begin < end) && (end < array.length));
		if(!isOK)
			throw new IllegalArgumentException("begin, end is invalid!");
		// 总个数
		int size = end - begin + 1;
		// 交换次数
		int times = size / 2;
		// 循环
		for(int i = 0; i < times; i++) {
			// 交换 array[begin + i] 与 array[end - i]
			swap(array, begin + i, end - i);
		}
	}
	// 交换
	private static void swap(int[] array, int i, int j) {
		int temp = array[i];
		array[i] = array[j];
		array[j] = temp;
	}
	
	// 赖浩勇代码
	public static void Reverse(int[] array, int begin, int end) {
	    if (array == null) {
	        throw new NullPointerException("array can not be null");
	    }

	    if (begin < 0) {
	        throw new IllegalArgumentException("begin不能小于0");
	    }

	    if (end < begin) {
	        throw new IllegalArgumentException("end不能小于begin");
	    }

	    if (end >= array.length) {
	        throw new IllegalArgumentException("end超过array最大下标");
	    }

	    while (end > begin) {
	        int temp = array[begin];
	        array[begin] = array[end];
	        array[end] = temp;

	        begin++;
	        end--;
	    }
	}
	
	
	public static void main(String[] args) {
		int[] array = new int[]{1, 2, 3, 4, 5, 6};
		Reverse.reverse(array, 0, 5);
		System.out.println(Arrays.toString(array));
	}

}
